package com.xbongbong.saas.help;

import com.xbongbong.paas.constant.PaasConstant;
import com.xbongbong.paas.enums.DelEnum;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.saas.constant.StringConstant;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 基础查询条件封装
 *
 * @author : zhenghuang.wu
 */
public class ParamHelper {

    /**
     * 不允许外部创建实例
     */
    private ParamHelper() {
    }

    /**
     * 初始化搜索参数
     *
     * @param baseDTO 基础参数
     */
    public static Map<String, Object> initParam(BaseDTO baseDTO) {
        return initParam(baseDTO.getCorpid(), PaasConstant.DEFAULT_INITIAL_CAPACITY);
    }

    /**
     * 初始化搜索参数
     *
     * @param corpid 公司id
     */
    public static Map<String, Object> initParam(String corpid) {
        return initParam(corpid, PaasConstant.DEFAULT_INITIAL_CAPACITY);
    }

    /**
     * 初始化搜索参数
     *
     * @param corpid          公司id
     * @param initialCapacity 初始化的map大小
     */
    public static Map<String, Object> initParam(String corpid, Integer initialCapacity) {
        Map<String, Object> param = new HashMap<>(initialCapacity);
        param.put(StringConstant.CORPID, corpid);
        param.put(StringConstant.DEL, DelEnum.NORMAL.getDel());
        return param;
    }

    /**
     * 初始化搜索参数,只有corpid
     *
     * @param corpid 公司id
     * @return paramMap
     */
    public static Map<String, Object> initParam4Corp(String corpid) {
        Map<String, Object> param = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        param.put(StringConstant.CORPID, corpid);
        return param;
    }

    /**
     * 初始化搜索参数
     *
     * @return paramMap
     */
    public static Map<String, Object> initParam4Nor() {
        Map<String, Object> param = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        param.put(StringConstant.DEL, DelEnum.NORMAL.getDel());
        return param;
    }

    /**
     * 初始化搜索参数(正常)
     *
     * @param param   搜索参数
     * @param baseDTO 基础参数
     */
    public static void initParam4Nor(Map<String, Object> param, BaseDTO baseDTO) {
        param = paramNew2Clear(param);
        param.put(StringConstant.CORPID, baseDTO.getCorpid());
        param.put(StringConstant.DEL, DelEnum.NORMAL.getDel());
    }

    /**
     * 初始化搜索参数(正常)
     *
     * @param param  搜索参数
     * @param corpid 公司id
     */
    public static void initParam4Nor(Map<String, Object> param, String corpid) {
        param = paramNew2Clear(param);
        param.put(StringConstant.CORPID, corpid);
        param.put(StringConstant.DEL, DelEnum.NORMAL.getDel());
    }

    /**
     * 初始化搜索参数(删除)
     *
     * @param param   搜索参数
     * @param baseDTO 基础参数
     */
    public static void initParam4Del(Map<String, Object> param, BaseDTO baseDTO) {
        param = paramNew2Clear(param);
        param.put(StringConstant.CORPID, baseDTO.getCorpid());
        param.put(StringConstant.DEL, DelEnum.DELETE.getDel());
    }

    /**
     * 初始化搜索参数(删除)
     *
     * @param param   搜索参数
     * @param corpid 公司id
     */
    public static void initParam4Del(Map<String, Object> param, String corpid) {
        param = paramNew2Clear(param);
        param.put(StringConstant.CORPID, corpid);
        param.put(StringConstant.DEL, DelEnum.DELETE.getDel());
    }

    /**
     * 初始化搜索参数(只含公司)
     *
     * @param param   搜索参数
     * @param baseDTO 基础参数
     */
    public static void initParam4Corp(Map<String, Object> param, BaseDTO baseDTO) {
        param = paramNew2Clear(param);
        param.put(StringConstant.CORPID, baseDTO.getCorpid());
    }

    /**
     * 初始化搜索参数(只含公司)
     *
     * @param param   搜索参数
     * @param corpid 公司id
     */
    public static void initParam4Corp(Map<String, Object> param, String corpid) {
        param = paramNew2Clear(param);
        param.put(StringConstant.CORPID, corpid);
    }

    /**
     * 初始化param
     *
     * @param param 搜索参数
     */
    private static Map<String, Object> paramNew2Clear(Map<String, Object> param) {
        if (Objects.isNull(param)) {
            param = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        } else {
            param.clear();
        }
        return param;
    }
}
